/*
  判断胜利的几个注意点：<br>
    1、15*15的棋盘，总共有572种方式胜利 <br>
    2、某赢法中成功落下一个棋子，那我们就为该种赢法的值加1，直到加5就实现了此种赢法，结束游戏 <br>
    3、如果该赢法中有另一方的棋子，此种赢法报废 <br>
    4、实际上两者轮流下棋占地，就是对胜利方式的侵占博弈，572种胜利方式是双方共同的胜利渠道，<br>
    一旦其中一种胜利方式被下子，该方则加大了对该种方式的权重，而这种胜利方式就会被另一方舍弃 <br>
    5、AI的目的有两个，其一，AI落子需要去破坏你某种赢法的可行性，其二，根据每种赢法的权重，确定下一步执行的位置 <br></br>
 */

function getCount(x, y) {
  let countTemp = 0,
  ym = y - 4,
  xm = x - 4;
  // 初始化
  let allwin= []
  for (let i = 0; i < x; i++) {
    allwin[i] = [];
    for (let j = 0; j < y; j++) {
      allwin[i][j] = [];
    }
  }
  //横线
  for (let i = 0; i < y; i++) {
    for (let j = 0; j < xm; j++) {
      for (let k = 0; k < 5; k++) {
        allwin[j + k][i][countTemp] = true;
      }
      countTemp++;
    }
  }

  //纵线
  for (let i = 0; i < x; i++) {
    for (let j = 0; j < ym; j++) {
      for (let k = 0; k < 5; k++) {
        allwin[i][j + k][countTemp] = true;
      }
      countTemp++;
    }
  }
  //正斜线
  for (let i = 0; i < xm; i++) {
    for (let j = 0; j < ym; j++) {
      for (let k = 0; k < 5; k++) {
        allwin[i + k][j + k][countTemp] = true;
      }
      countTemp++;
    }
  }
  //反斜线
  for (let i = 0; i < xm; i++) {
    for (let j = y-1; j > 3; j--) {
      for (let k = 0; k < 5; k++) {
        allwin[i + k][j - k][countTemp] = true;
      }
      countTemp++;
    }
  }

  return {
    countTemp,
    allwin
  }
}
const size = 15
const obj = getCount(size, size) // 15*15 的棋盘
const count = obj.countTemp
const allwin = obj.allwin

export {
  size,
  count,
  allwin
}

